package middle

import (
	"time"

	"github.com/gogf/gf/net/ghttp"
)

type RunTime struct {
	ID       int64               `json:"id"`                           //
	Method   string              `json:"method" xorm:"index 'Method'"` //请求方式
	Url      string              `json:"url" xorm:"index 'Url'"`       //请求地址
	Body     interface{}         `json:"body" xorm:"json 'Body'"`      //请求内容
	Head     map[string][]string `json:"head" xorm:"json 'Head'"`      //请求头
	Start    time.Time           `json:"start" xorm:"Start"`           //开始调用时间
	End      time.Time           `json:"end" xorm:"End"`               //结束调用时间
	Spend    int64               `json:"spend" xorm:"Spend"`           //用时
	MaxSpend int64               `json:"maxSpend" xorm:"MaxSpend"`     //最大用时
	Count    int64               `json:"count" xorm:"Count"`           //请求次数
	InDate   int64               `json:"inDate" xorm:"created"`        //创建时间
	EditDate int64               `json:"editDate" xorm:"updated"`      //修改时间
}

func newRunTime(r *ghttp.Request) *RunTime {
	return &RunTime{
		Method: r.Method,
		Url:    r.URL.Path,
		Body:   string(r.GetBody()),
		Head:   r.Header,
		Start:  time.Now(),
		Count:  1,
	}
}

func (this *RunTime) end() string {
	this.End = time.Now()
	this.Spend = this.End.UnixNano() - this.Start.UnixNano()
	return "Start,End,Spend"
}

func (this *RunTime) addCount(max int64) string {
	s := "Count"
	this.Count++
	if this.Spend > max {
		this.MaxSpend = max
		s += ",MaxSpend"
	}
	return s
}

//-----------------

type RunTimeLog struct {
	ID     int64               `json:"id"`                           //
	Method string              `json:"method" xorm:"index 'Method'"` //请求方式
	Url    string              `json:"url" xorm:"index 'Url'"`       //请求地址
	Body   interface{}         `json:"body" xorm:"json"`             //请求内容
	Head   map[string][]string `json:"head" xorm:"json"`             //请求头
	Start  time.Time           `json:"start" xorm:"Start"`           //开始调用时间
	End    time.Time           `json:"end" xorm:"End"`               //结束调用时间
	Spend  int64               `json:"spend" xorm:"Spend"`           //用时
	InDate int64               `json:"inDate" xorm:"created"`        //创建时间
}

func (this *RunTime) toLog() *RunTimeLog {
	return &RunTimeLog{
		Method: this.Method,
		Url:    this.Url,
		Body:   this.Body,
		Head:   this.Head,
		Start:  this.Start,
		End:    this.End,
		Spend:  this.Spend,
	}
}
